from __future__ import annotations

from abc import ABC, abstractmethod
from typing import Optional
import random

from .models import KnowledgePoint, GenerationConfig, Question


class BaseQuestionGenerator(ABC):
    @abstractmethod
    def generate_one(
        self,
        knowledge_point: KnowledgePoint,
        config: GenerationConfig,
        random_state: Optional[random.Random] = None,
    ) -> Question:
        ...